<?php

//require_once './Grafika/Grafika.php';

namespace App\Tools;

use App\Tools\QRcode;
use Illuminate\Support\Facades\Storage;

class Images
{


    /**
     * 用户上传
     * @param type $file
     * // 获取文件相关信息
     */
    public static function uploadImg($file, $pathmm = 'images')
    {
        $allowed_extensions = ["png", "jpg", "jepg", "jpeg", "gif"];
        $image_pix          = strtolower($file->extension());
        if ($image_pix && !in_array($image_pix, $allowed_extensions)) {
            errorMsg('只能上传 png | jpg |jepg| gif格式的图片');
        }
        $photoSize = $file->getSize() / (1024 * 1024);
        if ($photoSize > 3) {
            errorMsg('图片大小不能大于3M');
        }
        //获取文件的扩展名
        //        $extension = $file->getClientOriginalExtension();

        //要保存的文件名 时间+扩展名
        $filename = date('YmdHis') . rand(10, 99) . '.' . $image_pix;
        //图片存放路径
        $path = 'uploads/' . $pathmm . '/' . date('Ymd') . '/';
        //返回地址
        $filenameBack = '/' . $path . $filename;

        $re = Storage::putFileAs($path, $file, $filename);
        if ($re) {
            return $filenameBack;
        }
        errorMsg('上传失败');
    }


    /**
     * 用户上传多文件
     * @param type $file 上传文件
     * @param type $pathmm 上传路径
     */
    public static function uploadImgs($file, $pathmm = 'images')
    {
        // 文件类型白名单
        $allowed_extensions = ["png", "jpg", "jepg", "jpeg", "gif"];
        // 声明容器
        $list = [];

        // 遍历文件数组
        for ($i = 0; $i < count($file['name']); $i++) {
            # 文件扩展名
            $extension = strtolower(substr(strrchr($file['name'][$i], '.'), 1));
            # 文件名称(不带扩展名)
            $file_name = basename($file['name'][$i], "." . $extension);

            # 检测文件类型
            if ($extension && !in_array($extension, $allowed_extensions)) {
                showMsg(1002, '上传失败', '只能上传 png | jpg | jpeg | gif格式的图片');
            }
            # 检测文件大小
            $photoSize = $file['size'][$i] / (1024 * 1024);
            if ($photoSize > 3) {
                showMsg(1003, '图片大小不能大于3M');
            }

            # 源文件临时位置路径
            $tmp_file_path = $file['tmp_name'][$i];
            # 要保存的文件名 时间+扩展名
            $filename = date('YmdHis') . rand(10, 99) . '.' . $extension;
            # 图片存放路径
            $path = 'uploads/' . $pathmm . '/' . date('Ymd') . '/' . $filename;
            # 返回地址
            $back_path = '/' . $path;

            # 保存文件
            $save = move_uploaded_file($tmp_file_path, $path);
            if ($save) {
                $list[] = $back_path;
            }
        }
        return $list;
    }

    /**
     * @Author    Afree
     * @DateTime  2018-04-28
     * @copyright [上传文件]
     * @license   [license]
     * @version   [version]
     * @param     [type]      $file    [description]
     * @param     integer     $user_id [description]
     * @return    [type]               [description]
     */
    public static function uploadFile($file, $user_id = 0, $pathmm = 'usermodel')
    {
        $allowed_extensions = ["xml", "pdf", "csv", "doc", "json"];
        //获取文件的扩展名
        $extension = $file->getClientOriginalExtension();
        //        v($extension);
        if ($extension && !in_array($extension, $allowed_extensions)) {
            showMsg(1002, '只能上传 xml | pdf | doc格式的文件', '只能上传 xml | pdf | doc格式的文件');
        }
        $photoSize = $file->getClientSize() / (1024 * 1024);
        if ($photoSize > 3) {
            showMsg(1003, '文件大小不能大于3M');
        }
        //要保存的文件名 时间+扩展名
        $filename = date('YmdHis') . rand(10, 99) . '.' . $extension;
        //图片存放路径
        $path = 'uploads/' . $pathmm . '/' . $user_id . '/';
        //返回地址
        $filenameBack = '/' . $path . $filename;

        $re = Storage::putFileAs($path, $file, $filename);
        if ($re) {
            return $filenameBack;
        }
        showMsg(1005, '上传失败', $filenameBack);
    }

    /**
     * 缩略图
     * @param type $imagePath
     */
    public static function PimageSLPath($imagePath, $xx = 100, $yy = 100)
    {
        $imagePath = base_path() . "/public{$imagePath}";

        if (file_exists($imagePath)) {
            //获取图片信息
            list($imgw, $imgh, $imgt, $attr) = getimagesize($imagePath);
            if ($imgw > 0 && $imgh > 0) {

                //计算缩小的比例，目标最长边缩至150
                $percent = $imgw > $imgh ? ($xx / $imgw) : ($yy / $imgh); //以最长边作为缩放参考
                if ($percent < 1) {
                    //计算缩略图的新尺寸
                    $new_width  = floor($imgw * $percent);
                    $new_height = floor($imgh * $percent);
                } else {
                    //如果原图尺寸小于 150x150 直接输出原图尺寸
                    $new_width  = $imgw;
                    $new_height = $imgh;
                }
                $thumb = imagecreatetruecolor($new_width, $new_height);
                $red   = imagecolorallocate($thumb, 255, 255, 255); // 设置颜色 - ps里的选择画笔颜色
                imagefill($thumb, 0, 0, $red);

                //读取图片
                switch ($imgt) {
                    //判断格式，图像类型，但缩略图输出的都是jpg..参考下文
                    case 1:
                        $orgimg = imagecreatefromgif($imagePath);
                        break;
                    case 2:
                        $orgimg = imagecreatefromjpeg($imagePath);
                        break;
                    case 3:
                        $orgimg = imagecreatefrompng($imagePath);
                        break;
                }
                //imagecopyresampled(缩略图片资源, 源图片资源, dx, dy, sx,sy, 新图像宽度, 新图像高度, 源图像宽度, 源图像高度);
                imagecopyresampled($thumb, $orgimg, 0, 0, 0, 0, $new_width, $new_height, $imgw, $imgh); //缩放核心函数

                imagejpeg($thumb, $imagePath, 90); //输出图像
                //销毁资源
                imagedestroy($thumb);
                imagedestroy($orgimg);
            }
        }
    }

    //生成二维码
    public static function markEwm($user_id, $data = '', $paaa = 'ewm', $type = 1)
    {
        if (is_array($data)) {
            $data = json_encode($data, JSON_UNESCAPED_UNICODE);
        }
        //要保存的文件名 时间+扩展名
        $filename = md5($data . $user_id) . '.png';
        $path     = base_path() . "/public/uploads/{$paaa}/{$user_id}/";
        //图片存放路径
        $pathback = "/uploads/{$paaa}/{$user_id}/";
        //返回地址
        $filenameBack = $pathback . $filename;
        if (file_exists($path . $filename)) {
            return $type == 1 ? pdJMImg($filenameBack) : $filenameBack;
        } else {
            if (!is_dir($path)) {
                mkdir($path, 0777, true);
            }
            QRcode::png($data, $path . $filename, 1, 6, 6);
            return $type == 1 ? pdJMImg($filenameBack) : $filenameBack;
        }
    }

    /**
     * 生成唯一二维码
     * @param type $user_id
     * @param type $data
     * @param type $time
     * @param type $paaa
     * @return type
     */
    public static function markOneEwm($user_id, $data, $time = 600, $paaa = 'payewm')
    {
        $nowTime = time() - $time;
        if (is_array($data)) {
            $data = json_encode($data);
        }
        # 要保存的文件名 时间+扩展名
        $pathFile = base_path() . "/public/uploads/ewm/{$paaa}/";
        $path     = $pathFile . "{$user_id}.png";
        # 文件夹不存在就创建
        if (!is_dir($pathFile)) {
            mkdir($pathFile, 0777, true);
        }
        # 图片存放路径
        $pathback = "/uploads/ewm/{$paaa}/{$user_id}.png";
        if (file_exists($path)) {
            //            $cTime = filemtime($path);
            //            if ($cTime > $nowTime) {
            //                return $pathback;
            //            }
            //如果是文件直接删除
            @unlink($path);
        }
        # 生成图片
        QRcode::png($data, $path, 2, 6, 6);
        return pdJMImg($pathback);
    }
}
